# 查找当前目录下所有的 .c 文件
SRCS := $(wildcard *.c)
# 将 .c 文件转换为对应的 .o 文件
OBJS := $(patsubst %.c, %.o, $(SRCS))
# 指定最终生成的可执行文件名为 client
BIN  := client

# 指定使用的编译器为 gcc
CC := gcc
# 编译选项，开启所有常见警告并添加调试信息
CFLAGS := -Wall -g
# 定义删除命令
RM := rm -f

# 最终目标，生成 client 可执行文件
all: $(BIN)

# 链接所有 .o 文件生成 client 可执行文件
$(BIN): $(OBJS)
	$(CC) $^ -o $@ $(CFLAGS) -lpthread -lcrypt
	@echo "Client compilation completed successfully."

# 编译 .c 文件生成 .o 文件
%.o: %.c
	$(CC) -c $< -o $@ $(CFLAGS)
	@echo "Compiled $< to $@"

# 声明 clean、rebuild、all 为伪目标
.PHONY: clean rebuild all

# 清理规则，删除所有 .o 文件和可执行文件
clean:
	$(RM) $(OBJS) $(BIN)
	@echo "Cleaned up object files and the executable."

# 重新构建规则，先清理再重新编译
rebuild: clean all
